package com.best.oasis.settlement.service.base;

import java.io.Serializable;
import java.util.List;

import com.best.oasis.settlement.common.entity.base.BaseEntity;
import com.best.oasis.settlement.util.page.BasePageSO;
import com.best.oasis.settlement.util.page.PageList;

public interface BaseService<T extends BaseEntity, VO, PK extends Serializable> {
	/**
     * 获取T的所有对象列表
     */
    public abstract List<VO> getAll();
    /**
     * 获取T的所有对象列表, 可以根据so中的orderFields和orderType进行排序
     * @param so
     * @return
     */
    public List<VO> getAll(BasePageSO so);
    /**
     * 根据so进行搜索T的对象，返回可以翻页的对象列表
     * @param so
     * @return
     */
    public abstract PageList<VO> getPageList(BasePageSO so);

    /**
     * 根据id获取对象
     */
    public abstract VO get(PK id);

    /**
     * 查看某个对象是否存在
     */
    public abstract boolean exists(PK id);

    /**
     * 新建对象
     * @param object
     * @return
     */
    public VO create(VO object) ;
    
    public List<Long> batchCreate(List<VO> entityList) ;
    /**
     * 更新对象
     * @param object
     * @return
     */
	public VO update(VO object) ;
	
	public void batchUpdate(List<VO> entityList);
	
    /**
     * 删除某个对象
     */
    public abstract void remove(PK id);

    /**
     * 删除一系列对象
     * @param ids 要删除的对象id列表
     */
    public void remove(List<PK> ids);

    /**
     * 根据id列表获取对象列表
     * @param ids
     * @return
     */
    public abstract List<VO> getByIds(List<PK> ids);

    /**
     * 根据某个字段的值获取对象
     * @param fieldName
     *          字段名
     * @param value
     *          字段的值
     * @return
     *          成功返回该对象，否则返回null
     */
    public abstract VO getBy(String fieldName, Object value);
    /**
     * 根据某个字段的值获取对象列表
     * @param fieldName
     *          字段名
     * @param value
     *          字段的值
     * @return
     *          成功返回该对象列表，否则返回空的列表
     */
    public abstract List<VO> getListBy(String fieldName, Object value);

}
